var pkg = require('./package.json')
var path = require('path')
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var UglifyJsPlugin =require('uglifyjs-webpack-plugin');
module.exports = {
  entry: {
    app: path.resolve(__dirname, 'app/index.jsx'),
    // 将 第三方依赖（node_modules中的） 单独打包
    vendor: Object.keys(pkg.dependencies)
  },
  
  output: {
    path:__dirname+"/libs",//服务器根路径
    path: path.join(__dirname, 'libs'), //编译到当前目录
    filename: "bundle.js"
  },

  resolve:{
    extensions:['', '.js','.jsx'],
    alias:{
      '@':path.resolve(__dirname,'app')
    }
  },

  module: {
    loaders: [
      { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel'},
      { test: /\less$/, exclude: /node_modules/, loader: 'style!css!postcss!less' },
      { test: /\.scss$/, exclude: /node_modules/, loader: 'style!css!postcss!sass' },
      { test: /\.css$/, exclude: /node_modules/, loader: 'style!css!postcss' },
      { test:/\.(png|gif|jpg|jpeg|bmp)$/i, loader:'url-loader?limit=5000' },  // 限制大小5kb
      { test:/\.(png|woff|woff2|svg|ttf|eot)($|\?)/i, loader:'url-loader?limit=5000'}, // 限制大小小于5k
      {
          test: /\.css$/,
          loader: 'css?sourceMap&modules&localIdentName=[local]___[hash:base64:5]!!',
          exclude: /node_modules/
      },
      {
          test: /\.css$/, 
          loader: 'style!css'
      },
      ]
  },
  postcss: [
    require('autoprefixer')
  ],
  plugins: [
    // html 模板插件
    new HtmlWebpackPlugin({
        template: __dirname + '/app/index.tmpl.html',
        inject: 'true',
        hash: true,
        cache: false,
        minify: { //压缩HTML文件
          removeComments: true, //移除HTML中的注释
          collapseWhitespace: false //删除空白符与换行符
        }
    }),
    // 定义为生产环境，编译 React 时压缩到最小
    new webpack.DefinePlugin({
      'process.env':{
        'NODE_ENV': JSON.stringify(process.env.NODE_ENV)
      }
    }),
    // 为组件分配ID，通过这个插件webpack可以分析和优先考虑使用最多的模块，并为它们分配最小的ID
    new webpack.optimize.OccurenceOrderPlugin(),
    //压缩文件，并去掉所有警告
    new UglifyJsPlugin({
      // 使用外部引入的新版本的js压缩工具
      parallel: true,
      uglifyOptions: {
      ie8: false,
      ecma: 6,
      warnings: false,
      mangle: true,
      output: {
      comments: false,
      beautify: false,
      // debug true
      },
        compress: {
          // 在UglifyJs删除没有用到的代码时不输出警告
          warnings: false,
          // 删除所有的 `console` 语句
          // 还可以兼容ie浏览器
          drop_console: true,
          // 内嵌定义了但是只用到一次的变量
          collapse_vars: true,
          // 提取出出现多次但是没有定义成变量去引用的静态值
          reduce_vars: true,
        }
      }
    }),
    // webpack 内置的 banner-plugin
    new webpack.BannerPlugin("Copyright by sbotlp  @sbotlp.com.cn"),
    // 分离CSS和JS文件
    new ExtractTextPlugin('css/[name].[chunkhash:8].css'),

    // 提供公共代码
    new webpack.optimize.CommonsChunkPlugin({
      name: 'vendor',
      filename: 'js/[name].[chunkhash:8].js'
    }),

    // 可在业务 js 代码中使用 __DEV__ 判断是否是dev模式（dev模式下可以提示错误、测试报告等, production模式不提示）
    new webpack.DefinePlugin({
      __DEV__: JSON.stringify(JSON.parse((process.env.NODE_ENV == 'dev') || 'false'))
    })
  ]
}
